#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include<child.h>
#include<QtWidgets>
//qt += printsupport
#include<QPrintDialog>
#include<QPrinter>
#include<QPainter>
#include<QPrintPreviewDialog>
#include <QSignalMapper>
#include<QPixmap>
#include <QKeySequence>
#include<QFontDatabase>
#include <QList>
#include <QMdiArea>
#include <QMdiSubWindow>
#include<QTextCursor>
class child;
//被创建后添加到菜单河工具栏，然后将它连接到实现action功能的槽函数
class QAction;
//菜单，挂载在菜单栏QMenuBar容器上的
class QMeni;
//选项列表
class QComboBox;
//字体下拉列表框
class QFontComboBox;
//提供一个可同时显示多个文档容器的区域
class QMdiArea;
//大多数复杂软件，都是使用MDI框架，QMdiArea用于主容器，用于容纳多个子容器QMdiSubWindow
class QMdiSubWindow;
//处理信号
class QSignalMapper;


class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

    void mergeFormatOnWordOrSelection(const QTextCharFormat &format);

protected:
    void closeEvent(QCloseEvent *event);

private:
    void fileNew();             //新建
    void fileOpen();            //打开
    void fileSave();            //保存
    void fileSaveAs();          //另存为
    void fileprint();           //打印
    void filePrintPreview();    //文件打开预览
    void printPreview(QPrinter *qprinter);        //打印预览

    void undo();    //撤销
    void redo();    //重做
    void cut();     //剪切
    void copy();    //复制
    void paste();   //粘贴
    void about();   //关于
    void aboutQt();

    void textBold();//
    void textItalic();//
    void textUnderline();//
    void textAlign(QAction *a);//
    void textStyle(int styleIndex);//
    void textFamily(const QFont &f);//
    void textSize(const int &p);//
    void textColor();//

    void updateMenus();//更新菜单
    void updateWindowMenu();//
    void setActiveSubWindow(QWidget *widget);//设置窗口为活动子窗口
    child *creatchild();

private:
    void creatAction();     //创建菜单操作
    void creatMenus();      //创建菜单
    void creatToolBars();   //创建工具条
    void creatStatusBar();  //创建菜单条
    void enabledText();//
    void fontChanged(const QFont &f);//
    void colorChanged(const QColor &c);//
    void alignmentChanged(Qt::Alignment a);
    child *activeChils();
    QMdiSubWindow * findChild(const QString &filename);//

    QMdiArea *mdiArea;//多文档容器的容器管理器
    QSignalMapper *windowMapper;

    //菜单
    QMenu *fileMenu;
    QMenu *editMenu;
    QMenu *formatMenu;
    QMenu *fontMenu;
    QMenu *alignMenu;
    QMenu *windowMenu;
    QMenu *helpMenu;

    //工具栏
    QToolBar *fileToolBar;
    QToolBar *editToolBar;
    QToolBar *formatToolBar;
    QToolBar *comboToolBar;
    QComboBox *comboStyle;      //子控件，标准组合框
    QFontComboBox *comboFont;     //子控件，字体组合框
    QComboBox *comboSize;       //子控件，字体大小

    //菜单动作
    QAction *newAct;//
    QAction *openAct;//
    QAction *saveAct;//
    QAction *saveAsAct;//
    QAction *printAct;//
    QAction *printPreviewAct;//
    QAction *exitAct;//

    QAction *undoAct;//
    QAction *redoAct;//
    QAction *cutAct;//
    QAction *copyAct;//
    QAction *pasteAct;//

    QAction *boldAct;//
    QAction *italicAct;//
    QAction *underlineAct;//
    QAction *leftAlignAct;//
    QAction *centerAct;//
    QAction *rightAlignAct;//
    QAction *justifyAct;//
    QAction *colorAct;//

    QAction *closeAct;//
    QAction *closeAllAct;//
    QAction *tileAct;//
    QAction *cascadeAct;//
    QAction *nextAct;//
    QAction *previousAct;//
    QAction *separatorAct;//

    QAction *aboutAct;//
    QAction *aboutQtAct;//
};
#endif // MAINWINDOW_H





















